﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Model;
using DAO;

namespace RegraNegocio
{
    public class CategoriaBO
    {
        private static CategoriaBO categoriaBO = null;
        private bool DAO;

        public static CategoriaBO getInstance()
        {
            if (categoriaBO == null)
            {
                categoriaBO = new CategoriaBO();
            }

            return categoriaBO;
        }

        public Categoria consulta(Categoria categoria)
        {

            categoria = CategoriaDAO.getInstance().consultar(categoria);
            return categoria;

        }

        public bool alterar(Categoria categoria)
        {
            if (validador(categoria))
            {
                DAO = CategoriaDAO.getInstance().alterar(categoria);
                return DAO;
            }
            else
            {
                return false;
            }

        }

        public bool excluir(Categoria categoria)
        {
            if (!ProdutoDAO.getInstance().hasProdutoCadastrado(categoria))
            {
                DAO = CategoriaDAO.getInstance().cancelar(categoria);
                return DAO;
            }
            else  
            {
                MessageBox.Show("Registro vínculado ao um Produto");
                return false;
            }
        }

        public bool gravar(Categoria categoria)
        {
            if (validador(categoria))
            {
                DAO = CategoriaDAO.getInstance().inserir(categoria);
                return DAO;
            }
            else
            {
                return false;
            }

        }

        bool validador(Categoria categoria)
        {
            int number;
            if (Int32.TryParse(categoria.Descricao, out number))
            {
                MessageBox.Show("A descrição não pode conter somente números!");
                return false;
            }
            else if (Int32.TryParse(categoria.Nome, out number))
            {
                MessageBox.Show("O nome não pode conter somente números");
                return false;
            }
            else
            {
                return true;
            }
        }

        public List<Categoria> recuperarTodasCategorias()
        {
            return CategoriaDAO.getInstance().recuperarTodasCategorias();
        }

        public List<Categoria> recuperarCategorias(Categoria categoria)
        {
            List<Categoria> categoriasRecuperadas = null;

            categoriasRecuperadas = CategoriaDAO.getInstance().recuperarCategorias(categoria);

            return categoriasRecuperadas;
        }
    }
}
